/**
 * Copyright (C) BFH www.bfh.ch 2011
 * Code written by: Patrick Dobler, Marc Folly
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package ch.bfh.ti.kybernetik.gui.slick.components;

import java.util.Iterator;
import java.util.List;

import javax.vecmath.Point2d;

import org.newdawn.slick.Color;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;

import ch.bfh.ti.kybernetik.engine.model.Roboter;
import ch.bfh.ti.kybernetik.engine.model.RoboterMove;

/**
 * This Class renders the a {@link List} of {@link RoboterMove} instances
 * 
 */
public class RoboterMoveListComponent implements SlickComponent<List<RoboterMove>> {

	private List<RoboterMove> moves;

	private Color color;

	private final Roboter roboter;

	/**
	 * Creates a new {@link RoboterMoveListComponent}
	 * 
	 * @param roboter
	 *            instance to identify to which {@link Roboter} the
	 *            {@link RoboterMove} belong to
	 */
	public RoboterMoveListComponent(Roboter roboter) {
		super();
		this.roboter = roboter;
	}

	@Override
	public void render(GameContainer gc, Graphics g) throws SlickException {
		renderRoboterTrack(g);
	}

	private void renderRoboterTrack(final Graphics g) {
		g.setColor(this.getColor());
		final Point2d oldPoint = new Point2d(-1, -1);
		Iterator<RoboterMove> it = moves.iterator();
		while (it.hasNext()) {
			RoboterMove roboterMoveState = it.next();
			if (oldPoint.getX() != -1) {
				g.drawLine((float) roboterMoveState.getNewRoboterPoint().getX(), (float) roboterMoveState.getNewRoboterPoint().getY(),
						(float) oldPoint.getX(), (float) oldPoint.getY());
			}
			oldPoint.setX(roboterMoveState.getNewRoboterPoint().getX());
			oldPoint.setY(roboterMoveState.getNewRoboterPoint().getY());
		}
	}

	public void setMoves(List<RoboterMove> moves) {
		this.moves = moves;
	}

	@Override
	public List<RoboterMove> getModelObject() {
		return this.moves;
	}

	public void setColor(Color color) {
		this.color = color;
	}

	public Color getColor() {
		return color;
	}

	public Roboter getRoboter() {
		return roboter;
	}
}
